// pages/register/register.js
import Mcaptcha from '../../../utils/mcaptcha';
import shuffle from '../utils/shufflePhone';
import { phoneTest, passwordTest } from '../../../utils/regularIpt';
import { setUserInfo, setUserGrade } from '../../../utils/userInfo';
import Toast from '../../../miniprogram_npm/@vant/weapp/toast/toast';
Page({
    /**
     * 页面的初始数据
     */
    data: {
        params: '', // 页面参数，区分是注册还是忘记密码
        showPwd1: true, // 是否隐藏密码
        showPwd2: true,
        pwdVal1: '',
        pwdVal2: '',
        phoneError: '', // 正则验证结果提示使用
        passwordError: '',
        passwordError2: '',
        phoneIptValue: '', // 忘记密码显示的手机号
    },
    // 跳转到登录Page
    toLoginPage() {
        wx.switchTab({
            url: '../../../pages/mine/mine',
        })
    },
    // 显示密码
    yesPwd1() {
        this.setData({
            showPwd1: false,
            pwdInputType1: 'text',
        })
    },
    // 隐藏密码
    noPwd1() {
        this.setData({
            showPwd1: true,
            pwdInputType1: 'password',
        })
    },
    // 显示确认密码
    yesPwd2() {
        this.setData({
            showPwd2: false,
            pwdInputType2: 'text',
        })
    },
    // 隐藏确认密码
    noPwd2() {
        this.setData({
            showPwd2: true,
            pwdInputType2: 'password',
        })
    },
    /* 正则校验 */
    // 手机号
    bindblurPhone(e) {
        const res = phoneTest(e.detail.value);
        this.setData({
            phoneError: res,
        })
    },
    bindfocusPhone() {
        this.setData({
            phoneError: '',
        })
    },
    // 密码
    bindblurPassword(e) {
        const res = passwordTest(e.detail.value);
        this.setData({
            passwordError: res,
            pwdVal1: e.detail.value,
        })
    },
    bindfocusPassword() {
        this.setData({
            passwordError: '',
        })
    },
    // 确认密码
    bindblurPassword2(e) {
        const res = passwordTest(e.detail.value);
        this.setData({
            passwordError2: res,
            pwdVal2: e.detail.value,
        })
    },
    bindfocusPassword2() {
        this.setData({
            passwordError2: '',
        })
    },
    // 点击注册按钮
    regFormSubmit(e) {
        console.log('提交的form数据', e.detail.value);
        const { phoneError, passwordError, passwordError2 } = this.data;
        const { agreement, guiCode, phone, password, pwdComfirm } = e.detail.value;
        // 检查图形验证码是否正确
        let isGuiCode = false;
        const res = this.mcaptcha.validate(guiCode);
        if (guiCode == '' || guiCode == null) {
            isGuiCode = false;
        }
        if (!res) {
            isGuiCode = false;
        } else {
            // console.log('图形验证码正确');
            isGuiCode = true;
        }
        // 检查手机号是否正确
        let isPhone = false;
        if (phone != '' && phoneError === '') {
            isPhone = true;
        } else {
            isPhone = false;
        }
        // 检查密码是否正确
        let isPassword = false;
        if (password != '' && passwordError === '') {
            isPassword = true;
        } else {
            isPassword = false;
        }
        // 检查确认密码是否正确
        let isPassword2 = false;
        if (password != '' && passwordError2 === '') {
            isPassword2 = true;
        } else {
            isPassword2 = false;
        }

        // 是否勾选了协议
        if (agreement.length != 0) {
            console.log(isGuiCode, isPhone, isPassword, isPassword2);
            // 如果全部正确，再比较密码和确认密码之间的正确性
            if (isGuiCode && isPhone && isPassword && isPassword2) {
                if (password === pwdComfirm) {
                    // 正确的话，生成请求数据，使用云函数将数据用户数据存入数据库
                    wx.cloud.callFunction({
                        // 云函数名称
                        name: 'reqUserAPI',
                        // 传给云函数的参数
                        data: {
                            reqName: 'register', // 声明类型
                            phone,
                            password,
                            nickname: '用户' + shuffle(phone), // 用户名脱敏处理
                        },
                    })
                        .then(res => {
                            const { isExistPhone, userInfo, userGrade } = res.result;
                            if (isExistPhone) {
                                Toast.fail('用户已存在')
                            } else {
                                Toast({
                                    type: 'success',
                                    message: '注册成功',
                                    onClose: () => {
                                        this.refreshGidCode(); // 刷新验证码
                                        // 注册成功后，将获取的用户信息存入缓存，跳转到首页
                                        setUserInfo(userInfo.data);
                                        setUserGrade(userGrade.data);
                                        wx.reLaunch({
                                            url: '../../../pages/mine/mine',
                                        });
                                    },
                                });
                            }
                            console.log(res.result);
                        })
                        .catch(console.error)
                } else {
                    Toast.fail('两次输入的密码不一致');
                }
            } else {
                Toast.fail('请检查手机号、密码或验证码是否正确');
            }
        } else {
            Toast('请先勾选协议');
        };
    },
    // 点击修改按钮
    loseSubmit(e) {
        console.log('提交的form数据', e.detail.value);
        const { passwordError } = this.data;
        const { agreement, guiCode, phone, password } = e.detail.value;
        // 检查图形验证码是否正确
        let isGuiCode = false;
        const res = this.mcaptcha.validate(guiCode);
        if (guiCode == '' || guiCode == null) {
            isGuiCode = false;
        }
        if (!res) {
            isGuiCode = false;
        } else {
            // console.log('图形验证码正确');
            isGuiCode = true;
        }

        // 检查密码是否正确
        let isPassword = false;
        if (password != '' && passwordError === '') {
            isPassword = true;
        } else {
            isPassword = false;
        }

        // 是否勾选了协议
        if (agreement.length != 0) {
            console.log(isGuiCode, isPassword);
            // 如果全部正确，再比较密码和确认密码之间的正确性
            if (isGuiCode && isPassword) {
                wx.cloud.callFunction({
                    // 云函数名称
                    name: 'reqUserAPI',
                    // 传给云函数的参数
                    data: {
                        reqName: 'losePassword', // 声明类型
                        phone,
                        password,
                    },
                })
                    .then(res => {
                        const { isExistPhone, isLosePassword } = res.result;
                        if (isExistPhone) {
                            Toast({
                                type: 'success',
                                message: '修改成功',
                                onClose: () => {
                                    this.refreshGidCode(); // 刷新验证码
                                    // 修改成功后，返回登录页面
                                    wx.switchTab({
                                        url: '../../../pages/mine/mine',
                                    });
                                },
                            });
                        } else {
                            Toast.fail('手机号错误，没有此用户')
                        }
                        console.log(res.result);
                    })
                    .catch(console.error)
            } else {
                Toast.fail('请检查新密码或验证码是否正确');
            }
        } else {
            Toast('请先勾选协议');
        };
    },
    //刷新验证码
    refreshGidCode() {
        this.mcaptcha.refresh();
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        const that = this;
        const { params, phoneIptValue } = options;
        that.setData({
            params,
            phoneIptValue
        });
        if (params === 'register') {
            wx.setNavigationBarTitle({
                title: '注册'
            })
        } else {
            wx.setNavigationBarTitle({
                title: '忘记密码'
            })
        }
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {
        this.mcaptcha = new Mcaptcha({
            el: 'canvas',
            width: 80,
            height: 45,
            createCodeImg: ""
        });
    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    }
})